"""
@author: xxw
@file: 08.静态方法和类方法.py
@time: 2023/5/18 14:33
"""
# 属性
# 静态属性 --》类属性
# 普通属性 --》实例属性

# 方法
# 实例方法
# 静态方法
# 类方法

class Person():
    specials = "animal"

    def __init__(self, name):
        self.name = name

    # 普通（实例方法）方法   第一参数 --self 代表实例对象
    def nomal_method(self):
        print("nomal:")
        print(self.name)

    # 类方法  使用classmethod装饰的方法就是类方法
    # 第一个参数 -- cls 传递的是类，不是对象
    @classmethod
    def class_method(cls, name):
        print("classmethod:")
        print(type(cls))
        print(cls.specials)

    # 静态方法  使用staticmethod 装饰的就是静态方法
    # 参数的传递可有可无，像普通的函数，第一个参数即不代表类，也不代表实例
    @staticmethod
    def static_method(name):
        print("static_method")
        print(name, Person.specials)

p1 = Person("sc")
p1.normal_method()
p1.class_method("sc2")
p1.static_method("sc3")

Person.nomal_method(p1)
Person.class_method("sc4")
Person.static_method("sc5")